Hallo allerseits,
ich habe folgendes Problem: ich möchte gerne eine reihe char's die über den Seriellen Monitor an einen Arduino gesendet werden in int's umwandeln.
Dafür habe ich im Internet auch schon gesucht und die Funktion atoi() gefunden. Wenn ich diese jedoch anwende, liefert diese mir nur 0. Frage ist also, was ich falsch geschrieben habe.
Dafür ist hier mein Code:
#include <Adafruit_NeoPixel.h>
#define PIN 2
Adafruit_NeoPixel Feld(400, PIN, NEO_GRB + NEO_KHZ800);
byte preset[11][3] = {
{0, 0, 0},
{255, 0, 0},
{255, 127, 127},
{255, 255, 0},
{0, 255, 0},
{0, 255, 255},
{0, 0, 255},
{255, 0, 255},
{127, 255, 127},
{127, 127, 255},
{255, 255, 255}
};
void pixelFarbePreset(int pix, byte param) {
Feld.setPixelColor(pix, Feld.Color(preset[param][0], preset[param][1], preset[param][2]));
Feld.show();
}
int led = 12;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Feld.begin();
Serial.flush();
pinMode(led, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
String input = "";
String weltstr = "";
Feld.clear();
while (Serial.available() > 0)
{
input += (char) Serial.read(); // Read in one char at a time
delay(5); // Delay for 5 ms so the next char has time to be received
/*Serial.print(input.length());
Serial.print(" ");
Serial.println(input);*/
if (input.endsWith("#")) {
//Serial.print("ja");
input.remove(input.length() - 1);
int len = input.length();
if (len == 7) {
for (int i = 0; i < 7; i++) {
char chara = input[i];
int pos = atoi(chara);
Serial.print(chara);
Serial.print(" ");
Serial.println(pos);
Feld.setPixelColor(i, Feld.Color(preset[pos][0], preset[pos][1], preset[pos][2]));
Feld.show();
// pixelFarbePreset(i,pos);
}
}
if ((input == "1") or (input == "2") or (input == "3") or (input == "4") or (input == "5") or (input == "6") or (input == "7") or (input == "8") or (input == "9") or (input == "00") or (input == "10") or (input == "11"))
{
Serial.print("[");
Serial.print(preset[input.toInt()][0]);
Serial.print("][");
Serial.print(preset[input.toInt()][1]);
Serial.print("][");
Serial.print(preset[input.toInt()][2]);
Serial.println("]");
}
if (input == "on")
{
digitalWrite(led, HIGH); // on
}
else if (input == "off")
{
digitalWrite(led, LOW); // off
}
}
}
}
zur Erläuterung: wenn der Arduino vom PC, noch über den Seriellen Monitor, eine Nachricht, z.b. 1234567# empfängt, soll er diese umwandeln und mittels den im Preset[] gespeicherten RGB-Farbcodes auf einer Reihe WS2812B-Leds ausgeben. Das # am Ende symboliesiert dem Arduino, dass die Nachricht und somit der Zahlencode zu ende ist. das wird gleich im Anfang auch weggestrichen.
Vielen Dank schon mal für die Hilfen