Robotprogrammering med Arduino (C++), Inmatningsproblem

Permalänk

Robotprogrammering med Arduino (C++), Inmatningsproblem

Tjena allesammans! Någon här som känner sig manad att hjälpa mig med min första kod någonsin?

Håller på och programmerar en Robot som ska kunna köra frammåt,bakåt och svänga vänster å höger med hjälp av WASD. Samt byta mellan fyra olika hastigheter. Detta med hjälp av en Arduino MEGA samt två motorstyrningskort (MD03)

Innan ni totalt sågar min kod så kom ihåg att det är min första någonsin!

Problemet är att när jag ska mata in ett kommando tex "W" så måste jag ibland mata in två stycken.... Samma sak gäller om jag ska svänga vänster eller höger med "A" och "D" Det enda som alltid fungerar på första försöket är "Stopp" dvs när jag matar in ett mellanslag.

Ajja, nog av mig att försöka förklara nått jag inte förstår....
och jag vet att det säkert finns 1000 sätt att göra detta enklare... Men man tager vad man haver i kunskapsväg.
Fråga gärna om det är något ni undrar!

KOD:

#include <Wire.h>; /** Konstanter */ #define MD03_ADDRESS 0x58 // The address of the MD03 motor controller #define MD03_COMMAND_REG 0x00 #define MD03_STATUS_REG 0x01 #define MD03_SPEED_REG 0x02 #define MD03_ACCELERATION_REG 0x03 #define MD03_TEMPERATURE_REG 0x04 #define MD03_MOTOR_CURRENT_REG 0x05 #define MD03_SOFTWARE_REV_REG 0x07 #define MD03_MOVE_FORWARD 0x01 #define MD03_STOP 0x00 #define MD03_MOVE_BACKWARDS 0x02 struct sGLOBAL // Datastuktor som innehåller olika variabler { int hastighet; int hastighetV; int hastighetH; char bmotorH; char bmotorV; } s ={80,0,0,0,0}; byte counter; void korningH(){ if(s.bmotorH == 1) { //MotorHöger Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_COMMAND_REG); // Send the address of the command register Wire.write(MD03_MOVE_FORWARD); // Send the forward command Wire.endTransmission(); Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_SPEED_REG); // Send the address of speed register Wire.write(s.hastighetH); // Set the speed Wire.endTransmission(); } else if(s.bmotorH == 2) { //MotorHöger Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_COMMAND_REG); // Send the address of the command register Wire.write(MD03_MOVE_BACKWARDS); // Send the forward command Wire.endTransmission(); Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_SPEED_REG); // Send the address of speed register Wire.write(s.hastighetH); // Set the speed Wire.endTransmission(); } else if(s.bmotorH == 0) { //stanna motor vänster Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_COMMAND_REG); // Send the address of the command register Wire.write(MD03_STOP); // Send the forward command Wire.endTransmission(); } } void korningV(){ if(s.bmotorV == 1) { //Styrning vänster motor Wire.beginTransmission(MD03_ADDRESS+1); // Start communicating with the MD03 Wire.write(MD03_COMMAND_REG); // Send the address of the command register Wire.write(MD03_MOVE_FORWARD); // Send the forward command Wire.endTransmission(); Wire.beginTransmission(MD03_ADDRESS+1); // Start communicating with the MD03 Wire.write(MD03_SPEED_REG); // Send the address of speed register Wire.write(s.hastighetV); // Set the speed Wire.endTransmission(); } else if(s.bmotorV == 2) { //Styrning vänster motor Wire.beginTransmission(MD03_ADDRESS+1); // Start communicating with the MD03 Wire.write(MD03_COMMAND_REG); // Send the address of the command register Wire.write(MD03_MOVE_BACKWARDS); // Send the forward command Wire.endTransmission(); Wire.beginTransmission(MD03_ADDRESS+1); // Start communicating with the MD03 Wire.write(MD03_SPEED_REG); // Send the address of speed register Wire.write(s.hastighetV); // Set the speed Wire.endTransmission(); } else if(s.bmotorV == 0) { //stanna motor vänster Wire.beginTransmission(MD03_ADDRESS+1); // Start communicating with the MD03 Wire.write(MD03_COMMAND_REG); // Send the address of the command register Wire.write(MD03_STOP); // Send the forward command Wire.endTransmission(); } } void setup() { Wire.begin(); // Initialize the I2C bus Serial.begin(57600); // Initialize the serial bus Serial.println(__DATE__); Serial.println("Setup done!"); } void loop(){ while(Serial.available()>0){ char c = Serial.read(); switch(c){ //Framåt case 'W': Serial.println("Frammat"); s.hastighetH = s.hastighet; s.hastighetV = s.hastighet; s.bmotorH= 1; s.bmotorV= 1; korningH(); korningV(); break; //bakåt case 'S': Serial.println("Backar"); s.hastighetH = s.hastighet; s.hastighetV = s.hastighet; s.bmotorH= 2; s.bmotorV= 2; korningH(); korningV(); break; //hastigheter case '1': Serial.println("Hastighet 1 = 80"); s.hastighet=80; korningH(); korningV(); break; case '2': Serial.println("Hastighet 2 = 150"); s.hastighet=130; korningH(); korningV(); break; case '3': Serial.println("Hastighet 3 = 200"); s.hastighet=200; korningH(); korningV(); break; case '4': Serial.println("Hastighet 4 = 255"); s.hastighet=255; korningH(); korningV(); break; //sväng vänster case 'A': Serial.println("Vanster"); s.hastighetV = s.hastighet / 2; s.hastighetH = s.hastighet; s.bmotorH=1; s.bmotorV=1; korningH(); korningV(); break; //sväng höger case 'D': Serial.println("Hoger"); s.hastighetV = s.hastighet; s.hastighetH = s.hastighet / 2; s.bmotorH=1; s.bmotorV=1; korningH(); korningV(); break; case ' ': Serial.println("Stanna"); s.bmotorH= 0; s.bmotorV= 0; korningH(); korningV(); break; default: Serial.println("Unknown command:"); Serial.print(c); break; } } }

Dold text
Permalänk
Medlem

Skulle behöva indentering.

Permalänk
Skrivet av orp:

Skulle behöva indentering.

Är en vilsen Maskiningenjör ute på alldeles för djupt vatten. Men wikipediade och insåg att "indentering" är som någon form av styckeindelning?

Att koden ser skit ut kan jag förstå.... :/ Ber om ursäkt för detta!

Permalänk
Hedersmedlem
Skrivet av perssonheterjag:

Är en vilsen Maskiningenjör ute på alldeles för djupt vatten. Men wikipediade och insåg att "indentering" är som någon form av styckeindelning?

Att koden ser skit ut kan jag förstå.... :/ Ber om ursäkt för detta!

Forumet äter också upp inledande blanksteg om man inte skriver texten mellan [code] och [/code], så gör gärna det när du vill visa kod. Jag lade till sådana ovan.

Permalänk
Skrivet av Elgot:

Forumet äter också upp inledande blanksteg om man inte skriver texten mellan [code] och [/code], så gör gärna det när du vill visa kod. Jag lade till sådana ovan.

Tack så hemskt mycket!

Skickades från m.sweclockers.com

Permalänk
Medlem

Kan ej hjälpa dig med problemet, då jag mest kodar spel, men ett litet tips är att ta för vana att döpa alla dina variabler till engelska namn, bara en bra vana att ha om du skulle få jobb någon gång inom detta eller dyl.

Visa signatur

Ryzen 7 7800X3D | Nvidia Geforce RTX 4070 Ti 12gb | Corsair Vengeance DDR5 6000MHz RGB CL30 2x16GB | EVGA Supernova G2 750W | ASUS ROG Strix B650E-F Gaming | Be Quiet! Dark Rock Pro 5
Citera för svar!

Permalänk
Skrivet av ZyntaaX:

Kan ej hjälpa dig med problemet, då jag mest kodar spel, men ett litet tips är att ta för vana att döpa alla dina variabler till engelska namn, bara en bra vana att ha om du skulle få jobb någon gång inom detta eller dyl.

haha! Ska ta till mig det! Men är inte så säker att det är detta jag kommer jobba med i framtiden känner jag! Håller mig till det jag kan inom Konstruktion och produktion! Kanske sträcka mig till enklare PLC-programmering...

men är ett sjukt intressant Projekt

Permalänk
Medlem

Börja felsökningen med var i koden det blir fel. Får du printen från tangenttrycken varje gång? Alltså ifall serial.print kallas?

Om nej blir felet troligtvis i raderna

while(Serial.available()>0){
char c = Serial.read();

Om ja sker felet efter koden som exekveras efter respektive serial.print. Sätt ut fler serial.print på olika ställen och se så att de kallas när de ska.

Permalänk

Jag säger som sneth. Du får leta efter var i kommunikationskedjan som dina tecken tappas bort.

Stilmässigt finns det en del som skulle kunna putsas, men det ser ut som om det skulle fungera. Så länge det finns tecken i serieportens buffert hanterar programmet dem, ett i taget. Kommer alla inmatade tecken dit? Får du några "Unknown command"-utskrifter? I så fall har du problem med kommunikationen över serielinan.

En sak där du gör fel är att Serial.read() returnerar en int och inte en char, men det borde inte spela någon roll.

Permalänk
Skrivet av sneth:

Börja felsökningen med var i koden det blir fel. Får du printen från tangenttrycken varje gång? Alltså ifall serial.print kallas?

Om nej blir felet troligtvis i raderna

while(Serial.available()>0){
char c = Serial.read();

Om ja sker felet efter koden som exekveras efter respektive serial.print. Sätt ut fler serial.print på olika ställen och se så att de kallas när de ska.

Ska testa detta! Får se om jag hinner idag, snart dags att lämna labbet! men jag återkommer imorgon.

Skrivet av Ingetledigtnamn:

Jag säger som sneth. Du får leta efter var i kommunikationskedjan som dina tecken tappas bort.

Stilmässigt finns det en del som skulle kunna putsas, men det ser ut som om det skulle fungera. Så länge det finns tecken i serieportens buffert hanterar programmet dem, ett i taget. Kommer alla inmatade tecken dit? Får du några "Unknown command"-utskrifter? I så fall har du problem med kommunikationen över serielinan.

En sak där du gör fel är att Serial.read() returnerar en int och inte en char, men det borde inte spela någon roll.

Får inga "unknown command" sålänge jag inte skickar ett tecken som inte är definierat i swtich-funktionen.

Tecknen skickas alltid, iaf enligt serial monitoren. Programmet fungerar, förutom just det att man ibland måste skicka tex två stycken "W" på rad för att få roboten att byta från vänstersväng till rakt fram...

Ursäkta om jag svarar lite konstigt på frågorna. Är fruktansvärt dålig på detta! Men hoppas man lär sig något.

Permalänk
Medlem

Jag undrar varför du avslutar kommunikationen för att sedan börja den igen på raden efter?
Skulle kunna var där det blir fel, att kommunikationen inte hunnit stängas innan du försöker öppna den igen, kanske?

if(s.bmotorH == 1)
{
//MotorHöger
Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03
Wire.write(MD03_COMMAND_REG); // Send the address of the command register
Wire.write(MD03_MOVE_FORWARD); // Send the forward command
Wire.endTransmission(); <---------- prova ta bort?
Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 <---------- prova ta bort?
Wire.write(MD03_SPEED_REG); // Send the address of speed register
Wire.write(s.hastighetH); // Set the speed
Wire.endTransmission();
}

edit: Det är väl också det som skiljer mellan stop och de övriga händelserna?

Permalänk
Medlem
Skrivet av perssonheterjag:

haha! Ska ta till mig det! Men är inte så säker att det är detta jag kommer jobba med i framtiden känner jag! Håller mig till det jag kan inom Konstruktion och produktion! Kanske sträcka mig till enklare PLC-programmering...

men är ett sjukt intressant Projekt

Hehe jo, men det är en bra vana att ha överlag bara, kan vara så att du behöver fråga om hjälp på ett engelskt forum någon gång med

Visa signatur

Ryzen 7 7800X3D | Nvidia Geforce RTX 4070 Ti 12gb | Corsair Vengeance DDR5 6000MHz RGB CL30 2x16GB | EVGA Supernova G2 750W | ASUS ROG Strix B650E-F Gaming | Be Quiet! Dark Rock Pro 5
Citera för svar!

Permalänk
Skrivet av sneth:

Jag undrar varför du avslutar kommunikationen för att sedan börja den igen på raden efter?
Skulle kunna var där det blir fel, att kommunikationen inte hunnit stängas innan du försöker öppna den igen, kanske?

if(s.bmotorH == 1)
{
//MotorHöger
Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03
Wire.write(MD03_COMMAND_REG); // Send the address of the command register
Wire.write(MD03_MOVE_FORWARD); // Send the forward command
Wire.endTransmission(); <---------- prova ta bort?
Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 <---------- prova ta bort?
Wire.write(MD03_SPEED_REG); // Send the address of speed register
Wire.write(s.hastighetH); // Set the speed
Wire.endTransmission();
}

edit: Det är väl också det som skiljer mellan stop och de övriga händelserna?

Tog bort dessa rader, ingen skillnad i programmet... Vet faktiskt helt ärligt inte vad dom gjorde där från första början.... Men fortfarande samma problem med dubbelkommando..

Permalänk

Ok. När kommandot inte tar utan du måste trycka två gånger får du två utskrifter av "Frammat" då?
Då har i alla fall kommandot kommit fram och felet ligget i att Wire-kommandona inte tar.

Permalänk
Skrivet av Ingetledigtnamn:

Ok. När kommandot inte tar utan du måste trycka två gånger får du två utskrifter av "Frammat" då?
Då har i alla fall kommandot kommit fram och felet ligget i att Wire-kommandona inte tar.

Japp! Får utprintat "frammat" men inget händer...

Skickades från m.sweclockers.com

Permalänk

OK,

Då vet du att dina kommandon kommer fram över serielinan. Då får du kolla på nästa steg...

När du skickar kommandon till motorerna kör du till exempel:

Wire.beginTransmission(MD03_ADDRESS); Wire.write(MD03_COMMAND_REG); Wire.write(MD03_STOP); Wire.endTransmission();

Här skapar du en buffert, skriver data i bufferten och till slut skickar endTransmission iväg dina data över I2C till motorn. Kolla returvärdet från endTransmission. Om den returnerar 0 gick det bra, annars fick du en felkod. Börja med att skriva ut returnvärdet.

Om du får fel kan du vänta lite och försöka igen (men bara ett par gånger, annars kan ditt program fastna i en oändlig loop).

Permalänk
Medlem

Blev intresserad och hittade lite dokumentation. Det verkar som att kontrollkortet vill ha acceleration och hastighet satt innan körkommandot skickas.

Så när den inte reagerar har den antagligen ingen fart inställd, men eftersom du sätter farten (efter körkommandot) så har den fart inställd nästa gång.

Pröva att köra:

Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_SPEED_REG); // Send the address of speed register Wire.write(s.hastighetH); // Set the speed Wire.endTransmission(); Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_COMMAND_REG); // Send the address of the command register Wire.write(MD03_MOVE_BACKWARDS); // Send the forward command Wire.endTransmission();

Istället för det du har nu:

Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_COMMAND_REG); // Send the address of the command register Wire.write(MD03_MOVE_BACKWARDS); // Send the forward command Wire.endTransmission(); Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_SPEED_REG); // Send the address of speed register Wire.write(s.hastighetH); // Set the speed Wire.endTransmission();

På alla ställen där du kör. Verkar som att de har ett accelerations register som kan sättas om du vill ändra hur snabbt du når hastigheten också.

Det kan vara nödvändigt att köra begin/end par för varje värde du vill sätta. Kan för lite om I2C och kretsen du använder för att vara säker.

Visa signatur

.<

Permalänk
Skrivet av oelrich:

Blev intresserad och hittade lite dokumentation. Det verkar som att kontrollkortet vill ha acceleration och hastighet satt innan körkommandot skickas.

Så när den inte reagerar har den antagligen ingen fart inställd, men eftersom du sätter farten (efter körkommandot) så har den fart inställd nästa gång.

Pröva att köra:

Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_SPEED_REG); // Send the address of speed register Wire.write(s.hastighetH); // Set the speed Wire.endTransmission(); Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_COMMAND_REG); // Send the address of the command register Wire.write(MD03_MOVE_BACKWARDS); // Send the forward command Wire.endTransmission();

Istället för det du har nu:

Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_COMMAND_REG); // Send the address of the command register Wire.write(MD03_MOVE_BACKWARDS); // Send the forward command Wire.endTransmission(); Wire.beginTransmission(MD03_ADDRESS); // Start communicating with the MD03 Wire.write(MD03_SPEED_REG); // Send the address of speed register Wire.write(s.hastighetH); // Set the speed Wire.endTransmission();

På alla ställen där du kör. Verkar som att de har ett accelerations register som kan sättas om du vill ändra hur snabbt du når hastigheten också.

Det kan vara nödvändigt att köra begin/end par för varje värde du vill sätta. Kan för lite om I2C och kretsen du använder för att vara säker.

Tack så sjukt mycket! Det fixade mitt problem!

Kan ju dela med mig lite av projektet vi håller på med, nu när ni varit så snälla!

Det jag och några vänner gör just nu är ett Projekt i kursen Automation vid Umeå Universitet. Då vi tänker fjärrstyra en snöslunga. För att så småningom få den att köra av sig själv via en förinställd bana.

Snöslungan vi använder är en sån här

http://www.stiga.com/products/media/catalog/product/cache/4/i...

Denna sponsrade STIGA med. Kan ge en liten uppdatering om hur det gick sen!

Återkommer när jag får fler frågor!

Permalänk

Nytt problem!

Våran bluetoothmottagare tolkar inte inmatningarna rätt.. Om jag skickar tex ett "A" så får jag ut diverse skumma tecken. Har alltid trott att det berott på Baudrate. Men efter att ha testat den mot dator via Terminal så inser jag att jag får samma fel där. Bara olika tecken via olika Baurates.

Mottagaren vi använder är en:
http://www.mouser.com/catalog/specsheets/rn-41-ds-v3.3r[1].pdf

Hur kan man lösa detta?

Tacksam för svar!
// Jonas

Permalänk
Hedersmedlem
Skrivet av perssonheterjag:

Men efter att ha testat den mot dator via Terminal så inser jag att jag får samma fel där. Bara olika tecken via olika Baurates.

Hur menar du alltså? Är modulen inställd på någon särskilt hastighet och använder den både för att skicka och lyssna?

Permalänk
Skrivet av Elgot:

Hur menar du alltså? Är modulen inställd på någon särskilt hastighet och använder den både för att skicka och lyssna?

Skickar informationen från en App på mobilen för tillfället. Testat några olika. Men alltidmed samma problem.

Är osäker på vad modulen kör på för hastighet. Det enda jag hittar i databladet är följande: Baud rate speeds: 1,200 bps up to 921 Kbps, non-standard baud rates can be programmed.

Riktigt lurigt...

Permalänk
Hedersmedlem
Skrivet av perssonheterjag:

Är osäker på vad modulen kör på för hastighet. Det enda jag hittar i databladet är följande: Baud rate speeds: 1,200 bps up to 921 Kbps, non-standard baud rates can be programmed.

Enligt den här (appendix A) är standard 115200 bps.

Permalänk
Skrivet av Elgot:

Enligt den här (appendix A) är standard 115200 bps.

Tackar tackar! Nu fungerar den som den ska.

Vidare till nästa problem:

Appen skickar en text som är följande: #b=0#x=0#y=0#z=0# om och om igen på ett intervall som jag själv bestämmer. "b" ändras beroende på vilken av joystickknapparna jag trycker in på. t.ex b=1 för frammåt b=2 för bakåt.

Det jag nu undrar är hur jag ur den strängen text (#b=0#x=0#y=0#z=0#) Kan plocka ut enbart b-värdet. Då det är enbart detta som kommer användas.

Permalänk
Medlem
Skrivet av perssonheterjag:

Tackar tackar! Nu fungerar den som den ska.

Vidare till nästa problem:

Appen skickar en text som är följande: #b=0#x=0#y=0#z=0# om och om igen på ett intervall som jag själv bestämmer. "b" ändras beroende på vilken av joystickknapparna jag trycker in på. t.ex b=1 för frammåt b=2 för bakåt.

Det jag nu undrar är hur jag ur den strängen text (#b=0#x=0#y=0#z=0#) Kan plocka ut enbart b-värdet. Då det är enbart detta som kommer användas.

Kolla upp substring

Visa signatur

Main dator: i5 750 4Ghz, GTX 770 4GB, Intel SSD 80GB, 8GB Ram
Servern: Core 2 Duo, 4GB Ram, 4x2TB Lagring, Ubuntu Server 12.04

Permalänk
Hedersmedlem
Skrivet av perssonheterjag:

Tackar tackar! Nu fungerar den som den ska.

Vidare till nästa problem:

Appen skickar en text som är följande: #b=0#x=0#y=0#z=0# om och om igen på ett intervall som jag själv bestämmer. "b" ändras beroende på vilken av joystickknapparna jag trycker in på. t.ex b=1 för frammåt b=2 för bakåt.

Det jag nu undrar är hur jag ur den strängen text (#b=0#x=0#y=0#z=0#) Kan plocka ut enbart b-värdet. Då det är enbart detta som kommer användas.

Om du har möjlighet att välja själv kan ett alternativ också vara att byta till ett format som är enklare att tolka. Radbrytningar är till exempel bra för att veta att man man inte måste vänta på mera data och har man till exempel mellanslag istället för '#' och '=' kan man ju läsa in direkt med ">>".

Permalänk
Skrivet av erCarN:

Kolla upp substring

Tackar Kollar för fullt

Skrivet av Elgot:

Om du har möjlighet att välja själv kan ett alternativ också vara att byta till ett format som är enklare att tolka. Radbrytningar är till exempel bra för att veta att man man inte måste vänta på mera data och har man till exempel mellanslag istället för '#' och '=' kan man ju läsa in direkt med ">>".

Kan tyvär inte ändra något sådant i appen jag kör.. Ska vara om jag hittar nån annan.

Ett problem jag har nu är att få min text-string inmatad i programmet.

Den accepterar inte att jag sätter " String bluetooth = Serial.read()" Humm... Får klura vidare på detta imorgon!

Permalänk
Hedersmedlem
Skrivet av perssonheterjag:

Den accepterar inte att jag sätter " String bluetooth = Serial.read()" Humm... Får klura vidare på detta imorgon!

Vad använder du för bibliotek (vad är Serial)?
Ah, arduino var det kanske. Serial.readBytes() kan kanske vara något?

Permalänk
Skrivet av Elgot:

Vad använder du för bibliotek (vad är Serial)?
Ah, arduino var det kanske. Serial.readBytes() kan kanske vara något?

Jo det är Arduino. Serial.read() Är att den läser en insignal.
Ska testa!

Permalänk

Körde ett test med en modifierad kod från Arduinos hemsida:

/* String substring() Examples of how to use substring in a String created 27 July 2010, modified 2 Apr 2012 by Zach Eveland http://arduino.cc/en/Tutorial/StringSubstring This example code is in the public domain. */ void setup() { // Open serial communications and wait for port to open: Serial.begin(115200); // send an intro: Serial.println("\n\nString substring():"); Serial.println(); } void loop() { // Set up a String: String stringOne = Serial.read(); Serial.println(stringOne); // substring(index) looks for the substring from the index position to the end: if (stringOne.substring(17) b=1) { Serial.println("Forward "); } // do nothing while true: while(true); }

Och får följande felmeddelande:

stringl_sningbeta.ino: In function 'void loop()':
stringl_sningbeta.ino:28:34: error: conversion from 'int' to 'String' is ambiguous
stringl_sningbeta.ino:28:34: note: candidates are:
In file included from H:\Programmeing\arduino-1.6.0\hardware\arduino\avr\cores\arduino/Arduino.h:222:0,
from stringl_sningbeta.ino:15:
H:\Programmeing\arduino-1.6.0\hardware\arduino\avr\cores\arduino/WString.h:61:2: note: String::String(const __FlashStringHelper*) <near match>
String(const __FlashStringHelper *str);
^
H:\Programmeing\arduino-1.6.0\hardware\arduino\avr\cores\arduino/WString.h:61:2: note: no known conversion for argument 1 from 'int' to 'const __FlashStringHelper*'
H:\Programmeing\arduino-1.6.0\hardware\arduino\avr\cores\arduino/WString.h:59:2: note: String::String(const char*) <near match>
String(const char *cstr = "");
^
H:\Programmeing\arduino-1.6.0\hardware\arduino\avr\cores\arduino/WString.h:59:2: note: no known conversion for argument 1 from 'int' to 'const char*'
stringl_sningbeta.ino:32:31: error: expected ')' before 'b'
Error compiling.

Dold text
Permalänk
Hedersmedlem

Testa:

char buffer[128]; int n = Serial.readBytes(buffer, min(128, Serial.available());